if (event->type == GDK_MOTION_NOTIFY || event->type == GDK_ENTER_NOTIFY)
update_cursor (toplevel, device, target);
+ if (event->type == GDK_TOUCH_BEGIN)
+ gtk_window_set_pointer_focus_grab (toplevel, device, sequence, target);
+
/* Let it take the effective pointer focus anyway, as it may change due
* to implicit grabs.
*/
break;
case GDK_BUTTON_PRESS:
case GDK_BUTTON_RELEASE:
+ target = gtk_window_lookup_effective_pointer_focus_widget (toplevel,
+ device,
+ sequence);
+ gtk_window_set_pointer_focus_grab (toplevel, device, sequence,
+ event->type == GDK_BUTTON_PRESS ?
+ target : NULL);
+ break;
case GDK_SCROLL:
case GDK_TOUCHPAD_PINCH:
case GDK_TOUCHPAD_SWIPE:
}
}
}
+
+void
+gtk_window_set_pointer_focus_grab (GtkWindow *window,
+ GdkDevice *device,
+ GdkEventSequence *sequence,
+ GtkWidget *grab_widget)
+{
+ GtkPointerFocus *focus;
+
+ focus = gtk_window_lookup_pointer_focus (window, device, sequence);
+ g_assert (focus != NULL);
+ gtk_pointer_focus_set_implicit_grab (focus, grab_widget);
+}
GtkWidget *target,
gdouble x,
gdouble y);
+void gtk_window_set_pointer_focus_grab (GtkWindow *window,
+ GdkDevice *device,
+ GdkEventSequence *sequence,
+ GtkWidget *grab_widget);
void gtk_window_update_pointer_focus_on_state_change (GtkWindow *window,
GtkWidget *widget);